#include <stdio.h>
#include <string.h>
#include <stdlib.h>

// 处理整数部分（去除前导零）
void process_integer_part(char *int_part) {
    if (strlen(int_part) == 0) {       // 处理空整数部分（如".5"）
        strcpy(int_part, "0");
        return;
    }

    // 找到第一个非零字符位置
    int first_non_zero = -1;
    for (int i = 0; i < strlen(int_part); i++) {
        if (int_part[i] != '0') {
            first_non_zero = i;
            break;
        }
    }

    // 处理全零情况（如"0000"）
    if (first_non_zero == -1) {
        strcpy(int_part, "0");
    }
        // 去除前导零（如"00123" -> "123"）
    else {
        memmove(int_part,
                int_part + first_non_zero,
                strlen(int_part) - first_non_zero + 1);  // +1 保留空字符
    }
}

// 处理小数部分（去除末尾零）
void process_fraction_part(char *frac_part) {
    int len = strlen(frac_part);
    if (len == 0) return;

    // 找到最后一个非零字符位置
    int last_non_zero = -1;
    for (int i = len - 1; i >= 0; i--) {
        if (frac_part[i] != '0') {
            last_non_zero = i;
            break;
        }
    }

    // 处理全零情况（如".000"）
    if (last_non_zero == -1) {
        frac_part[0] = '\0';
    }
        // 截断末尾零（如"4500" -> "45"）
    else {
        frac_part[last_non_zero + 1] = '\0';
    }
}

// 规范化实数格式
void normalize(char *num) {
    char int_part[201] = {0};  // 整数部分缓冲区
    char frac_part[201] = {0}; // 小数部分缓冲区

    // 分割整数和小数部分
    char *dot = strchr(num, '.');
    if (dot != NULL) {
        *dot = '\0';           // 暂时替换为字符串终止符
        strcpy(int_part, num);
        strcpy(frac_part, dot + 1);
        *dot = '.';            // 恢复原始字符
    } else {
        strcpy(int_part, num);
        frac_part[0] = '\0';
    }

    // 处理各部分
    process_integer_part(int_part);
    process_fraction_part(frac_part);

    // 重新组合结果
    if (strlen(frac_part) > 0) {
        sprintf(num, "%s.%s", int_part, frac_part);
    } else {
        strcpy(num, int_part);
    }

    // 处理特殊情况（如".5" -> "0.5"）
    if (num[0] == '.') {
        memmove(num + 1, num, strlen(num) + 1);
        num[0] = '0';
    }

    // 处理类似"0."的情况
    if (strcmp(num, "0.") == 0) {
        strcpy(num, "0");
    }
}

int main() {
    char num1[201], num2[201];

    // 输入处理
    printf("请输入第一个实数: ");
    fgets(num1, sizeof(num1), stdin);
    num1[strcspn(num1, "\n")] = 0;

    printf("请输入第二个实数: ");
    fgets(num2, sizeof(num2), stdin);
    num2[strcspn(num2, "\n")] = 0;

    // 规范化处理
    normalize(num1);
    normalize(num2);

    // 结果比较
    if (strcmp(num1, num2) == 0) {
        printf("两个实数完全相等。\n");
    } else {
        printf("两个实数不完全相等。\n");
    }

    return 0;
}